From 52ac34a08c842d3d48c78fbc9c52a48aef393f70 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Tue, 5 Dec 2000 16:47:04 +0000 Subject: [PATCH] Close the display. (xim_close_dpy): Handle case that the display has been closed. --- src/xterm.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/xterm.c b/src/xterm.c index 464f8c39489..da53834e08f 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -11263,14 +11263,26 @@ x_connection_closed (display, error_message) struct x_display_info *dpyinfo = x_display_info_for_display (display); Lisp_Object frame, tail; - /* Indicate that this display is dead. */ + /* We have to close the display to inform Xt that it doesn't + exist anymore. If we don't, Xt will continue to wait for + events from the display. As a consequence, a sequence of + + M-x make-frame-on-display RET :1 RET + ...kill the new frame, so that we get an IO error... + M-x make-frame-on-display RET :1 RET + + will indefinitely wait in Xt for events for display `:1', opened + in the first class to make-frame-on-display. -#if 0 /* Closing the display caused a bus error on OpenWindows. */ + Closing the display is reported to lead to a bus error on + OpenWindows in certain situations. I suspect that is a bug + in OpenWindows. I don't know how to cicumvent it here. */ + #ifdef USE_X_TOOLKIT XtCloseDisplay (display); -#endif #endif + /* Indicate that this display is dead. */ if (dpyinfo) dpyinfo->display = 0; @@ -11658,11 +11670,13 @@ xim_close_dpy (dpyinfo) { #ifdef USE_XIM #ifdef HAVE_X11R6_XIM - XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, - NULL, EMACS_CLASS, - xim_instantiate_callback, NULL); + if (dpyinfo->display) + XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, + NULL, EMACS_CLASS, + xim_instantiate_callback, NULL); #endif /* not HAVE_X11R6_XIM */ - XCloseIM (dpyinfo->xim); + if (dpyinfo->display) + XCloseIM (dpyinfo->xim); dpyinfo->xim = NULL; XFree (dpyinfo->xim_styles); #endif /* USE_XIM */ -- 2.30.2